package com.xoa.service.workPlan;

import com.xoa.dao.users.UsersMapper;
import com.xoa.dao.workPlan.WorkDetailMapper;
import com.xoa.model.users.Users;
import com.xoa.model.workPlan.WorkDetail;
import com.xoa.model.workPlan.WorkDetailWithBLOBs;
import com.xoa.util.CookiesUtil;
import com.xoa.util.DateFormat;
import com.xoa.util.ToJson;
import com.xoa.util.common.L;
import com.xoa.util.common.StringUtils;
import com.xoa.util.common.session.SessionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;

/**
 * 创建作者:   牛江丽
 * 创建日期:   ${date} ${time}
 * 类介绍  :
 * 构造参数:
 */
@Service
public class WorkDetailService {

    @Resource
     private WorkDetailMapper workDetailMapper;

    @Resource
    private UsersMapper usersMapper;

    /**
     * 创建作者:   牛江丽
     * 创建日期:   2017年9月19日 下午14:18:00
     * 方法介绍:   根据计划id进行查询工作进度日志
     * 参数说明:   @param planId 计划id
     * 返回值说明:
     */
    public ToJson<WorkDetailWithBLOBs> selWorkDetailByPlanId(WorkDetailWithBLOBs workDetailWithBLOBs){
        ToJson<WorkDetailWithBLOBs> json = new ToJson<WorkDetailWithBLOBs>(1, "error");
        try{
            List<WorkDetailWithBLOBs> workDetailList=workDetailMapper.selWorkDetailByPlanId(workDetailWithBLOBs);
            for (WorkDetail workDetail: workDetailList){
               if(usersMapper.getByUserId(workDetail.getWriter())!=null){
                   workDetail.setWriterName(usersMapper.getByUserId(workDetail.getWriter()).getUserName());
               }
            }
            json.setObj(workDetailList);
            json.setMsg("ok");
            json.setFlag(0);
        }catch(Exception e){
            json.setMsg(e.getMessage());
            L.e("WorkDetailService selWorkDetailByPlanId:"+e);
            e.printStackTrace();
        }
        return  json;
    }

    /**
     * 创建作者:   牛江丽
     * 创建日期:   2017年9月19日 下午14:18:00
     * 方法介绍:   根据id进行查询工作进度日志
     * 参数说明:   @param detailId 工作进度id
     * 返回值说明:
     */
    public ToJson<WorkDetailWithBLOBs> selWorkDetailById(int  detailId){
        ToJson<WorkDetailWithBLOBs> json = new ToJson<WorkDetailWithBLOBs>(1, "error");
        try{
            WorkDetail workDetail=workDetailMapper.selWorkDetailById(detailId);
            workDetail.setCurrent(new Date());
            json.setObject(workDetail);
            json.setMsg("ok");
            json.setFlag(0);
        }catch(Exception e){
            json.setMsg(e.getMessage());
            L.e("WorkDetailService selWorkDetailById:"+e);
            e.printStackTrace();
        }
        return  json;
    }

    /**
     * 创建作者:   牛江丽
     * 创建日期:   2017年9月19日 下午14:18:00
     * 方法介绍:   根据id修改工作进度
     * 参数说明:   record
     * 返回值说明:
     */
    @Transactional
    public ToJson<WorkDetailWithBLOBs> updateWorkDetailById(WorkDetailWithBLOBs record){
        ToJson<WorkDetailWithBLOBs> json = new ToJson<WorkDetailWithBLOBs>(1, "error");
        try{
            int count=workDetailMapper.updateWorkDetailById(record);
            if(count>0){
                json.setMsg("ok");
                json.setFlag(0);
            }
        }catch(Exception e){
            json.setMsg(e.getMessage());
            L.e("WorkDetailService updateWorkDetailById:"+e);
            e.printStackTrace();
        }
        return  json;
    }


    /**
     * 创建作者:   牛江丽
     * 创建日期:   2017年9月19日 下午14:18:00
     * 方法介绍:  添加工作进度
     * 参数说明:   record
     * 返回值说明:
     */
    @Transactional
    public ToJson<WorkDetailWithBLOBs> insertWorkDetail(WorkDetailWithBLOBs record, HttpServletRequest request){
        ToJson<WorkDetailWithBLOBs> json = new ToJson<WorkDetailWithBLOBs>(1, "error");
        try{
            Cookie redisSessionCookie = CookiesUtil.getCookieByName(request, "redisSessionId");
            Users user= SessionUtils.getSessionInfo(request.getSession(), Users.class, new Users(),redisSessionCookie);
            record.setWriter(user.getUserId());
           if(!StringUtils.checkNull(record.getWriteTimeStr())){
               record.setWriteTime(DateFormat.getDate(record.getWriteTimeStr()));
           }
           if(StringUtils.checkNull(record.getProgress())){
               record.setProgress("");
           }
            if(StringUtils.checkNull(record.getWriter())){
                record.setWriter("");
            }
            if(StringUtils.checkNull(record.getAttachmentId())){
                record.setAttachmentId("");
            }
            if(StringUtils.checkNull(record.getAttachmentName())){
                record.setAttachmentName("");
            }
            int count=workDetailMapper.insertWorkDetail(record);
            if(count>0){
                json.setMsg("ok");
                json.setFlag(0);
            }
        }catch(Exception e){
            json.setMsg(e.getMessage());
            L.e("WorkDetailService insertWorkDetail:"+e);
            e.printStackTrace();
        }
        return  json;
    }

    /**
     * 创建作者:   牛江丽
     * 创建日期:   2017年9月19日 下午14:18:00
     * 方法介绍:  根据id删除工作进度
     * 参数说明:   detailId
     * 返回值说明:
     */
    @Transactional
    public ToJson<WorkDetailWithBLOBs> delWorkDetailById(int detailId){
        ToJson<WorkDetailWithBLOBs> json = new ToJson<WorkDetailWithBLOBs>(1, "error");
        try{
            int count=workDetailMapper.delWorkDetailById(detailId);
            if(count>0){
                json.setMsg("ok");
                json.setFlag(0);
            }
        }catch(Exception e){
            json.setMsg(e.getMessage());
            L.e("WorkDetailService delWorkDetailById:"+e);
            e.printStackTrace();
        }
        return  json;
    }
}
